﻿/*!
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using Pittypat.Data;

namespace Pittypat
{
    /// <summary>
    /// 所有功能模块需要继承的抽象类。
    /// </summary>
    /// <remarks>
    /// 一个模块类是一个 Api 类。Api 类的对象实例直接被 Web API 基础架构创建，其中的功能也被 Web API 调用，不会通过 MVC 等方式首先创建 Controller 等对象。Api 相当于 MVC 中的 Controller。
    /// </remarks>
    public abstract class Module
    {
        // 当前数据服务
        private IDataService dataService;

        /// <summary>
        /// 初始化 <see cref="Module"/> 类的新实例。
        /// </summary>
        protected Module()
        {
            this.dataService = null;
        }

        /// <summary>
        /// 获取针对当前模块的数据服务。
        /// </summary>
        /// <remarks>
        /// 并不是所有模块都需要访问数据服务，因此默认情况下，模块不会在内部创建数据服务。只有第一次访问该属性时才会在内部创建 <see cref="IDataService"/> 对象实例。
        /// </remarks>
        protected IDataService DataService
        {
            get
            {
                if (this.dataService == null)
                {
                    this.dataService = Data.DataService.Find(this.GetType());
                }

                return this.dataService;
            }
        }
    }
}
